package com.atguigu.tree;

/**
 * @author 龍
 * 要求：
 * 右图的二叉树的节点，要求以数组的方式来存放arr【1，2，3，4，5，6】要求在遍历数组arr时，让然可以
 * 进行前序遍历，中序遍历以及后序遍历。
 * 顺序存储二叉树的特点（通常只考虑完全二叉树）：
 * 第n个元素的左子节点为 2*n+1
 * 第n个元素的右子节点为 2*n+2
 * 第n个元素元素的父节点为（n-1）/2。
 * n：表示二叉树中的第几个元素（按0开始编号如图所示）
 */
public class ArrBinaryTreeDemo {
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5,6,7};
        ArrBinaryTree arrBinaryTree = new ArrBinaryTree(arr);
        // 1-2-4-5-3-6-7
        arrBinaryTree.preOrder();



    }
}

/**
 * 编写一个ArrBinaryTree,实现顺序存储二叉树遍历。
 */
class ArrBinaryTree{
    private int[] arr;
    public ArrBinaryTree(int[] arr){
        this.arr=arr;
    }

    public void preOrder(){
        this.preOrder(0);
    }
    /**
     * 编写一个方法，完成顺序存储二叉树的前序遍历,如果需要进行其他的排序，则只需要将三种遍历的顺序进行修改就可以了。
     * @param index 数组的下标
     */
    public void preOrder(int index){
        //如果数组为空，胡总和数组的长度为0（即数组中没有数据的存在）
        if (arr==null||arr.length==0){
            System.out.println("数组为空，不能按照二叉树的前序进行遍历！！！");
        }
        //输出当前的这个元素
        System.out.println(arr[index]);
        //向左递归遍历
        if (index*2+1<arr.length){
            preOrder(index*2+1);
        }
        //向右进行递归遍历
        if (index*2+2<arr.length){
            preOrder(index*2+2);
        }


    }
}